﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using EntitiesLayer;
using System.Data.SqlClient;
using System.Drawing;

namespace DataLayer
{
    public static class FilesManagement
    {
        /// <summary>
        /// 
        /// </summary>
        /// <param name="nombreArchivo">Nombre del archivo a ser cargado</param>
        /// <returns>Retorna una lista de string con el contenido por línea del archivo ingresado.</returns>
        public static List<string> ObtenerContenidoArchivo(string nombreArchivo)
        {
            

            try
            {
                List<string> listaInfo = new List<string>();
                StreamReader readStream = new StreamReader(nombreArchivo);
                String linea = readStream.ReadLine();
                while (linea != null)
                {
                    //Console.WriteLine(line);
                    listaInfo.Add(linea);

                    linea = readStream.ReadLine();
                }
                readStream.Close();

                return listaInfo;
            }
            catch (Exception e)
            {
                return null;
            }
            
            
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="nombreArchivo">Nombre del archivo</param>
        /// <param name="activarSobreescritura">Activar o Desactivar SobreEscritura</param>
        /// <param name="listaData">Lista de objetos tipo string con la data correspondiente al documento.</param>
        public static bool GuardarData(string nombreArchivo, bool activarSobreescritura, List<string> listaData)
        {
            try
            {
                int contadorLista = listaData.Count;
                StreamWriter streamEscritura = new StreamWriter(nombreArchivo, activarSobreescritura);
                for (int DocQuant = 0; DocQuant < contadorLista; DocQuant++)
                {
                    streamEscritura.WriteLine(listaData[DocQuant]);
                }
                streamEscritura.Close();
                return true;
            }
            catch (Exception e)
            {
                return false;
            }
        }

        /// <summary>
        /// Obtiene la Imagen Frontal desde disco duro y la convierte a un objeto tipo Image.
        /// </summary>
        /// <param name="direccionArchivo">Ruta física donde se encuentra localizada la imagen.</param>
        /// <returns>Retorna la Imagen en Bits</returns>
        public static Image ObtenerImagenAnversa(string direccionArchivo)
        {
            if (File.Exists(direccionArchivo))
            {
                return Image.FromFile(direccionArchivo);
            }
            else
                return null;
        }

        /// <summary>
        /// Obtiene la Imagen Trasera desde disco duro y la convierte a un objeto tipo Image.
        /// </summary>
        /// <param name="direccionArchivo">Ruta física donde se encuentra localizada la imagen.</param>
        /// <returns>Retorna la Imagen en Bits</returns>
        public static Image ObtenerImagenReversa(string direccionArchivo)
        {
            if (File.Exists(direccionArchivo))
            {
                return Image.FromFile(direccionArchivo);
            }
            else
                return null;
        }

        /// <summary>
        /// Método que permite la eliminacion de archivos en disco.
        /// </summary>
        /// <param name="direccionArchivo">Dirección en disco donde se encuentra localizado el archivo.</param>
        /// <param name="borrarData">Bandera que identifica si se debe o no eliminar el archivo.</param>
        /// <returns></returns>
        public static bool BorrarArchivo(string direccionArchivo, bool borrarData = false)
        {
            try
            {
                bool respuestaBorrado = false;
                FileInfo objArchivo = new FileInfo(direccionArchivo);
                if (objArchivo.Exists)
                {
                    objArchivo.Delete();
                    respuestaBorrado = true;
                }

                if (borrarData && objArchivo.Directory.Exists && !objArchivo.Directory.GetFiles().Any())
                {
                    objArchivo.Directory.Delete();
                }

                if (borrarData && objArchivo.Directory.Parent.Exists && !objArchivo.Directory.Parent.GetDirectories().Any())
                {
                    objArchivo.Directory.Parent.Delete();
                }

                return respuestaBorrado;
            }
            catch { return false; }

        }

    }
}
